<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

namespace Admin\Controller;

use User\Api\UserApi;
use Common\Api\MailApi;
/**
 * 后台用户控制器
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
class UserController extends AdminController {

    /**
     * 用户管理首页
     * @author 麦当苗儿 <zuojiazi@vip.qq.com>
     */
    public function index() {
        //TCHAT 增加权限过滤，非管理员只能查看到自己帐号列表
        if ( !in_group(UID , 2) ) {//检查是否在管理组
            //检查是否是超级管理员
            is_administrator(UID) ?: $map['uid'] = array( 'eq' ,  UID  );
        } else {
            $nickname = I('nickname');
            $map['status'] = array( 'egt' , 0 );
            if ( is_numeric($nickname) ) {
                $map['uid|nickname'] = array( intval($nickname) , array( 'like' , '%' . $nickname . '%' ) , '_multi' => true );
            } else {
                $map['nickname'] = array( 'like' , '%' . (string)$nickname . '%' );
            }
        }
        if ( !is_administrator(UID) ) {//TCHAT 非顶级管理员过滤掉顶级管理员用户数据
            $map['uid'][] = array( 'gt' , 1 );
        }

        $list = $this->lists('Member' , $map);
        int_to_string($list);
        $this->assign('_list' , $list);
        $this->meta_title = '用户列表';
        $this->display();
    }

    /**
     * 修改昵称初始化
     * @author huajie <banhuajie@163.com>
     */
    public function updateNickname() {
        $nickname = M('Member')->getFieldByUid(UID , 'nickname');
        $this->assign('nickname' , $nickname);
        $this->meta_title = '修改昵称';
        $this->display('updatenickname');
    }

    /**
     * 修改昵称提交
     * @author huajie <banhuajie@163.com>
     */
    public function submitNickname() {
        //获取参数
        $nickname = I('post.nickname');
        $password = I('post.password');
        empty( $nickname ) && $this->error('请输入昵称');
        empty( $password ) && $this->error('请输入密码');

        //密码验证
        $User = new UserApi();
        $uid = $User->login(UID , $password , 4);
        ( $uid == -2 ) && $this->error('密码不正确');

        $Member = D('Member');
        $data = $Member->create(array( 'nickname' => $nickname ));
        if ( !$data ) {
            $this->error($Member->getError());
        }

        $res = $Member->where(array( 'uid' => $uid ))->save($data);

        if ( $res ) {
            $user = session('user_auth');
            $user['username'] = $data['nickname'];
            session('user_auth' , $user);
            session('user_auth_sign' , data_auth_sign($user));
            //OneChat 增加发送更改邮件功能
            $Mail = new MailApi();
            $status = $Mail->sendMail(UID,2);
            $this->success('修改昵称成功！');
        } else {
            $this->error('修改昵称失败！');
        }
    }

    /**
     * 修改密码初始化
     * @author huajie <banhuajie@163.com>
     */
    public function updatePassword() {
        $this->meta_title = '修改密码';
        $this->display('updatepassword');
    }

    /**
     * 修改密码提交
     * @author huajie <banhuajie@163.com>
     */
    public function submitPassword() {
        //获取参数
        $password = I('post.old');
        empty( $password ) && $this->error('请输入原密码');
        $data['password'] = I('post.password');
        empty( $data['password'] ) && $this->error('请输入新密码');
        $repassword = I('post.repassword');
        empty( $repassword ) && $this->error('请输入确认密码');

        if ( $data['password'] !== $repassword ) {
            $this->error('您输入的新密码与确认密码不一致');
        }

        $Api = new UserApi();
        $res = $Api->updateInfo(UID , $password , $data);
        if ( $res['status'] ) {
            //OneChat 增加发送更改邮件功能
            $Mail = new MailApi();
            $status = $Mail->sendMail(UID,4);
            $this->success('修改密码成功！');
        } else {
            $this->error($res['info']);
        }
    }

    /**
     * 用户行为列表
     * @author huajie <banhuajie@163.com>
     */
    public function action() {
        //获取列表数据
        $Action = M('Action')->where(array( 'status' => array( 'gt' , -1 ) ));
        $list = $this->lists($Action);
        int_to_string($list);
        // 记录当前列表页的cookie
        Cookie('__forward__' , $_SERVER['REQUEST_URI']);

        $this->assign('_list' , $list);
        $this->meta_title = '用户行为';
        $this->display();
    }

    /**
     * 新增行为
     * @author huajie <banhuajie@163.com>
     */
    public function addAction() {
        $this->meta_title = '新增行为';
        $this->assign('data' , NULL);
        $this->display('editaction');
    }

    /**
     * 编辑行为
     * @author huajie <banhuajie@163.com>
     */
    public function editAction() {
        $id = I('get.id');
        empty( $id ) && $this->error('参数不能为空！');
        $data = M('Action')->field(true)->find($id);

        $this->assign('data' , $data);
        $this->meta_title = '编辑行为';
        $this->display('editaction');
    }

    /**
     * 更新行为
     * @author huajie <banhuajie@163.com>
     */
    public function saveAction() {
        $res = D('Action')->update();
        if ( !$res ) {
            $this->error(D('Action')->getError());
        } else {
            $this->success($res['id'] ? '更新成功！' : '新增成功！' , Cookie('__forward__'));
        }
    }

    /**
     * 会员状态修改
     * @author 朱亚杰 <zhuyajie@topthink.net>
     */
    public function changeStatus($method = NULL) {
        $id = array_unique((array)I('id' , 0));
        if ( in_array(C('USER_ADMINISTRATOR') , $id) ) {
            $this->error("不允许对超级管理员执行该操作!");
        }
        $id = is_array($id) ? implode(',' , $id) : $id;
        if ( empty( $id ) ) {
            $this->error('请选择要操作的数据!');
        }
        $map['uid'] = array( 'in' , $id );
        switch ( strtolower($method) ) {
            case 'forbiduser':
                $this->forbid('Member' , $map);
                break;
            case 'resumeuser':
                $this->resume('Member' , $map);
                break;
            case 'deleteuser':
                $this->delete('Member' , $map);
                break;
            default:
                $this->error('参数非法');
        }
    }

    /**
     * 新增用户
     * @param string $username
     * @param string $password
     * @param string $repassword
     * @param string $email
     */
    public function add($username = '' , $password = '' , $repassword = '' , $email = '') {
        if ( IS_POST ) {
            /* 检测密码 */
            if ( $password != $repassword ) {
                $this->error('密码和重复密码不一致！');
            }

            /* 调用注册接口注册用户 */
            $User = new UserApi;
            $uid = $User->register($username , $password , $email);
            if ( 0 < $uid ) { //注册成功
                $user = array( 'uid' => $uid , 'nickname' => $username , 'status' => 1 );
                if ( !M('Member')->add($user) ) {
                    $this->error('用户添加失败！');
                } else {
                    //OneChat 新增发送邮件通知
                    $Mail = new MailApi();
                    $user[] = array(
                        'username'=>$username,
                        'password'=>$password,
                        'email'=>$email,
                        'phone'=>'',
                    );
                    $re = $Mail->sendMail($uid , 1,$user);
                    if ( $re['status'] == 0 ) {
                        $this->success('用户添加成功！,但未成功发送注册邮件，错误代码为：' . $re['info'] , U('index'));
                    } else {
                        $this->success('用户添加成功！并已将注册邮件发送至帐号邮箱。' , U('index') , 15);
                    }
                }
            } else { //注册失败，显示错误信息
                $this->error($this->showRegError($uid));
            }
        } else {
            $this->meta_title = '新增用户';
            $this->display();
        }
    }

    /**
     * 获取用户注册错误信息
     *
     * @param  integer $code 错误编码
     *
     * @return string        错误信息
     */
    private function showRegError($code = 0) {
        switch ( $code ) {
            case -1:
                $error = '用户名长度必须在16个字符以内！';
                break;
            case -2:
                $error = '用户名被禁止注册！';
                break;
            case -3:
                $error = '用户名被占用！';
                break;
            case -4:
                $error = '密码长度必须在6-30个字符之间！';
                break;
            case -5:
                $error = '邮箱格式不正确！';
                break;
            case -6:
                $error = '邮箱长度必须在1-32个字符之间！';
                break;
            case -7:
                $error = '邮箱被禁止注册！';
                break;
            case -8:
                $error = '邮箱被占用！';
                break;
            case -9:
                $error = '手机格式不正确！';
                break;
            case -10:
                $error = '手机被禁止注册！';
                break;
            case -11:
                $error = '手机号被占用！';
                break;
            default:
                $error = '未知错误';
        }

        return $error;
    }

}